home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / lib / rcscripts / net.modules.d / dhcpcd < prev    next >
Text File  |  2006-04-25  |  3KB  |  135 lines

  1. # Copyright (c) 2004-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Header$
  4.  
  5. # Contributed by Roy Marples (uberlord@gentoo.org)
  6.  
  7. # Fix any potential localisation problems
  8. # Note that LC_ALL trumps LC_anything_else according to locale(7)
  9. dhcpcd() {
  10.     LC_ALL=C /sbin/dhcpcd "$@"
  11. }
  12.  
  13. # char* dhcpcd_provides(void)
  14. #
  15. # Returns a string to change module definition for starting up
  16. dhcpcd_provides() {
  17.     echo "dhcp"
  18. }
  19.  
  20. # void dhcpcd_depend(void)
  21. #
  22. # Sets up the dependancies for the module
  23. dhcpcd_depend() {
  24.     after interface
  25. }
  26.  
  27. # bool dhcpcd_check_installed(void)
  28. #
  29. # Returns 1 if dhcpcd is installed, otherwise 0
  30. dhcpcd_check_installed() {
  31.     [[ -x /sbin/dhcpcd ]] && return 0
  32.     ${1:-false} && eerror "For DHCP (dhcpcd) support, emerge net-misc/dhcpcd"
  33.     return 1
  34. }
  35.  
  36. # bool dhcpcd_check_depends(void)
  37. #
  38. # Checks to see if we have the needed functions
  39. dhcpcd_check_depends() {
  40.     local f
  41.  
  42.     for f in interface_variable interface_device interface_is_up interface_get_address; do
  43.         [[ $( type -t ${f} ) == function ]] && continue
  44.         eerror "dhcpcd: missing required function ${f}\n"
  45.         return 1
  46.     done
  47.  
  48.     return 0
  49. }
  50.  
  51. # char* dhcpcd_get_vars(char *interface)
  52. #
  53. # Returns a string spaced with possible user set
  54. # configuration variables
  55. dhcpcd_get_vars() {
  56.     echo "dhcpcd_${1} dhcp_${1}"
  57. }
  58.  
  59. # bool dhcpcd_stop(char *iface)
  60. #
  61. # Stop DHCP on an interface by calling dhcpcd -z $iface
  62. #
  63. # Returns 0 (true) when a DHCP address dropped
  64. # otherwise return 1
  65. dhcpcd_stop() {
  66.     local iface=${1} count signal pidfile="/var/run/dhcpcd-${1}.pid" dhcp
  67.     
  68.     dhcpcd_check_installed || return 0
  69.  
  70.     [[ ! -f ${pidfile} ]] && return 0
  71.  
  72.     ebegin "Stopping dhcpcd on ${iface}"
  73.     local ifvar=$( interface_variable ${1} )
  74.     local pid=$( cat ${pidfile} )
  75.  
  76.     eval dhcp=\" \$\{dhcp_${ifvar}\} \"
  77.     if [[ ${dhcp} == *' release '* ]]; then
  78.         signal="HUP"
  79.     else
  80.         signal="TERM"
  81.     fi
  82.  
  83.     kill -s ${signal} ${pid} &>${devnull}
  84.     process_finished ${pid} dhcpcd
  85.     eend $? "timed out"
  86.     return $?
  87. }
  88.  
  89. # bool dhcpcd_start(char *iface)
  90. #
  91. # Start DHCP on an interface by calling dhcpcd $iface $options
  92. #
  93. # Returns 0 (true) when a DHCP address is obtained, otherwise 1
  94. dhcpcd_start() {
  95.     local iface=${1} opts hostname pidfile="/var/run/dhcpcd-${1}.pid" dhcp
  96.     local ifvar=$( interface_variable ${iface} )
  97.  
  98.     interface_exists ${iface} true || return 1
  99.  
  100.     # Get our options
  101.     eval opts=\"\$\{dhcpcd_${ifvar}\}\"
  102.  
  103.     # Map some generic options to dhcpcd
  104.     eval dhcp=\" \$\{dhcp_${ifvar}\} \"
  105.     [[ ${dhcp} == *' nodns '* ]] && opts="${opts} -R"
  106.     [[ ${dhcp} == *' nontp '* ]] && opts="${opts} -N"
  107.     [[ ${dhcp} == *' nonis '* ]] && opts="${opts} -Y"
  108.     [[ ${dhcp} == *' nogateway '* ]] && opts="${opts} -G"
  109.  
  110.     # We transmit the hostname by default
  111.     if [[ ${dhcp} != *' nosendhost '* && ${opts} != *'-h '* ]]; then
  112.         hostname=$( hostname )
  113.         [[ -n ${hostname} && ${hostname} != "(none)" && ${hostname} != localhost ]] \
  114.             && opts="-h ${hostname} ${opts}"
  115.     fi
  116.  
  117.     # Bring up DHCP for this interface (or alias)
  118.     ebegin "Running dhcpcd"
  119.  
  120.     if ! clean_pidfile ${pidfile} ; then
  121.         ewarn "dhcpcd is already running on ${iface}"
  122.         eend 0
  123.         return 0
  124.     fi
  125.  
  126.     eval "dhcpcd ${opts} ${iface}"
  127.     eend $? || return 1
  128.  
  129.     # DHCP succeeded, show address retrieved
  130.     local addr=$( interface_get_address ${iface} )
  131.     einfo "${iface} received address ${addr}"
  132.  
  133.     return 0
  134. }
  135.